//手写promise.all的方法
const p1 = Promise.resolve(1)
const p2 = Promise.reject(2)
const p3 = Promise.resolve(3)

// Promise.all([p1, p2, p3]).then(result => {
//   console.log(result)
// }).catch(re => {
//   console.log(re)
// })
//返回的是Promise对象
// 返回的数组里面承载着对象的返回值
// 判断是否为数组
Promise._all = function (arr) {
  return new Promise(function (resolve,rejected) {
    if (!arr instanceof Array) return rejected(new Error('必须为数组'))
    // 数组中的每一项是promise对象
    let newArr = []
    for (let i = 0; i < arr.length; i++){
      Promise.resolve(arr[i]).then(success => {
        // console.log('成功'+i)
        newArr[i] = success // 谁先执行不一定？
        const newArray=newArr.filter(item=>item)
        if (newArray.length === arr.length) {
          resolve(newArray)
        }
      }).catch(re => {
        // console.log('错误错误错误')
        rejected(re)
      })
    }
  })
}
// 测试的代码
Promise._all([p1, p2, p3]).then(result => {
  console.log(result)
}).catch(error => {
  console.log(error)
})